package sessionBeans;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.jboss.logging.Logger;

import dtos.ArticuloDTO;
import entities.Articulo;
import entities.Modulo;
import exceptions.EntityAlreadyExistException;

/**
 * Session Bean implementation class AdministrarArticuloBean
 */
@Stateless
@LocalBean
public class AdministrarArticuloBean implements AdministrarArticulo {
	
	@PersistenceContext(unitName="CRM")
	private EntityManager em;
	
	Logger logger = Logger.getLogger(AdministrarArticuloBean.class);

	
    public AdministrarArticuloBean() {
        // TODO Auto-generated constructor stub
  
    }

	@Override
	public void CargarArticulo(ArticuloDTO art) throws EntityAlreadyExistException {
		// TODO Auto-generated method stub
		Articulo articulo = this.buscarArticulo(art.getCodigo());
		if(articulo != null){
			throw new EntityAlreadyExistException("Articulo:" + articulo.getCodigo());
		}
		
		try {
			Modulo dep = em.find(Modulo.class, art.getModulo().getId());
			Articulo artic = new Articulo();
			artic.setModulo(dep);
			artic.setDescripcion(art.getDescripcion());
			artic.setCodigo(art.getCodigo());
			em.persist(artic);			
		} catch (Exception e) {
			Date fecha = Calendar.getInstance().getTime();
			logger.error("ERROR: Error creando articulo nuevo (/n) EXCEPTION: "+ e.getStackTrace() +"(/n) FECHA: "+fecha);
			e.printStackTrace();
			//System.out.println("YA EXISTE EL ARTICULO");
		}
	}

	@Override
	public List<ArticuloDTO> GetAllArticulos() {
		// TODO Auto-generated method stub
		Query q = em.createQuery("from Articulo");
		List<Articulo> listaArt = (ArrayList<Articulo>) q.getResultList();
		List<ArticuloDTO> listaArtDto = new ArrayList<ArticuloDTO>();
		for(Articulo art : listaArt){
			ArticuloDTO articu = new ArticuloDTO();
			articu = articu.parseDTO(art);
			listaArtDto.add(articu);
		}
		return listaArtDto;
	}

	@Override
	public Articulo buscarArticulo(String codigo) {
		// TODO Auto-generated method stub
		Articulo articulo = null;
		Query q = em.createQuery("from Articulo a where a.codigo = :codigo");
		q.setParameter("codigo", codigo);
		List<Articulo> articulos = (ArrayList<Articulo>) q.getResultList();
		if(!articulos.isEmpty())
			articulo = articulos.get(0);
		return articulo;
	}
	
	public ArticuloDTO buscarArticuloDTO(String codigo) {
		// TODO Auto-generated method stub
		ArticuloDTO art = null;
		Articulo articulo = null;
		Query q = em.createQuery("from Articulo a where a.codigo = :codigo");
		q.setParameter("codigo", codigo);
		List<Articulo> articulos = (ArrayList<Articulo>) q.getResultList();
		if(!articulos.isEmpty()){
			articulo = articulos.get(0);
			art = new ArticuloDTO();
			art.parseDTO(articulo);			
		}
		return art;
	}

	@Override
	public int foo() {
		// TODO Auto-generated method stub
		return 2;
	}

	
}
